// validate插件无法验证隐藏区域的内容
define(['jquery'], function ($) {

	var beforeSubmit  = {

		// 如果表单内有未展开的区域， 展开该区域并重新触发表单验证
		panelValidate: function () {
			return new Promise(function (resolve, reject) {
				var panels = $('.panel-collapse');

				for (var i = 0; i < panels.length; i++) {

					if (!panels.eq(i).hasClass('in')) {

						panels.eq(i).one('shown.bs.collapse', function () {
							$('form').submit();
						});

						// 判断是否有非必填，但是填了不符合格式的
						if (panels.eq(i).find('input.error').length > 0) {
						 	return panels.eq(i).collapse('show');
						}

						// 判断是否所有的必填项都填写
						var required_input = panels.eq(i).find('input[required]');
						var required_select = panels.eq(i).find('select[required]');

						for (var n = 0; n < required_select.length; n++) {
							if (required_select.eq(n).val() == '') return panels.eq(i).collapse('show');
						}
						for (var n = 0; n < required_input.length; n++) {
							if (required_input.eq(n).val() == '') return panels.eq(i).collapse('show');
						}
						
					}
				}

				resolve();

			});
		},

		// 前端判断建筑面积 > 使用面积 ， 建筑面积 = 使用面积 + 公摊面积， 记租面积默认为建筑面积
		areaValidate: function () {
			return new Promise (function (resolve, reject) {

				var build_area = parseFloat($('#bunk_size').val()),// 建筑面积
					use_area = parseFloat($('input[name="use_size"]').val()), // 使用面积
					share_area = parseFloat($('#share_size').val());

	
				// 建筑面积要大雨使用面积
				if (!isNaN(use_area)) {
					if (isNaN(build_area) || use_area > build_area) {
						return alert('使用面积不能大于建筑面积');
					}
				}

				if (!isNaN(build_area) && build_area != share_area + use_area) {

					return alert('使用面积+公摊面积=建筑面积');
				}

				resolve();

			});
		},

		/**
		 * 检查新增时填写的代码是否已存在
		 * @params name=> 名称， project, bunk, brand等, arg ajax数据名
		 */
		bindCheck: function (name, ajax_url, arg) {

			var elem = $('input[name="'+ name +'_code"]');
			elem.attr('data-error', '0'); // 0 表示该代码可用， 1表示不可用

			elem.on('change', function () {
				if (this.value == '') return;

				var arr = name.split(''); 
				arr[0] = arr[0].toUpperCase(); // 将name的首字母改成大写， ajax地址
				

				var errHtml = '<label id="'+ name +'_code-error" class="error" for="'+ name +'_code" style="display: none;">代码已存在</label>',
					url = ajax_url ? ajax_url : '/Business/' + arr.join('') + '/checkCode',
					data = {},
					_this = $(this);
				$(this).siblings('label').remove();
				$(this).after(errHtml);
				if (arg) {
					data[arg + '_code'] = $(this).val();
					data[arg + '_id'] = $('input[name="'+ name +'_id"]').val();
				} else {
					data[name + '_code'] = $(this).val();
					data[name + '_id'] = $('input[name="'+ name +'_id"]').val();
				}
				

				$.post(url, data, function (json) {
					json = JSON.parse(json);
					if (json.code != 1) {
						_this.removeClass('valid').addClass('error').data('error', 1);
						_this.next().html('代码已存在').css({'display': 'inline-block'});

					} else {
						_this.data('error', 0);
					}
				});

			});
		},

		/**
		 * 表单提交前确认代码是否可用
		 */
		checkError: function (name, element) {
			var elem = element || $('input[name="'+ name +'_code"]');
			if (elem.data('error') == 1) {
				elem.focus().removeClass('valid').addClass('error').data('error', 1);
				elem.next().html('代码已存在').css({'display': 'inline-block'});
				return false;
			}else{
				return true;
			}
		}

	}

	return beforeSubmit;
});